
/**
 * 
 * @param {*} options 
 *    type      请求的方式(get/post/put/delete)
 *    url       请求的地址
 *    data      携带数据 (string|object)
 *    async     是否异步
 *    dataType  接口返回数据类型(text/xml/css/js/json)
 *
 * @return Promise实例 (默认pending, ajax请求完成之后,根据结果改变状态)        
 */
function request(options) { // option = {url, data = "", async = true, dataType = "text", success}
    // debugger;
    return new Promise(function (resolve, reject) {
        var { type = "get", url, data = "", async = true, dataType = "text" } = options;


        if (typeof data == "object") { // 判断data是对象(不准确)
            var list = [];
            for (var key in data) {
                var val = data[key];
                list.push(key + "=" + val);  //'user=a123123'
            }
            // console.log(list);

            data = list.join("&");
            // console.log(data);
        }


        var xhr = new XMLHttpRequest();

        if (type.toLowerCase() == "get") {
            xhr.open("get", data ? (url + "?" + data) : url, async);
            xhr.send();
        } else if (type.toLowerCase() == "post") {
            xhr.open("post", url, async);
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr.send(data);
        }

        xhr.onreadystatechange = function () {
            // debugger;
            try {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = xhr.responseText;
                    if (dataType == "json") {
                        result = JSON.parse(result);
                    }
                    // console.log(result);

                    // 拿到数据   => 执行后续的操作  => 多种多样
                    // 登录  => 登录成功/失败
                    // 查询数据  => 查询成功/失败
                    // 删除数据  => 成功/失败
                    // 新增数据  => 成功/失败

                    resolve(result);
                }
            } catch (err) {
                reject(err);
            }
        }
    })
}
